package first

import (
	"strconv"
	"strings"
)

/*
	数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中，第5位（从下标0开始计数）是5，第13位是1，第19位是4，等等。

	请写一个函数，求任意第n位对应的数字。
	示例 1：

	输入：n = 3
	输出：3
	示例 2：

	输入：n = 11
	输出：0

	限制：

	0 <= n <2^31

	来源：力扣（LeetCode）
	链接：https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof
	著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
func FindNthDigit(n int) int {
	return findNthDigit(n)
}
// todo 思路是对的、但超时
func findNthDigit(n int) int {
	sumBit := 0
	s := ""
	for i := 0; i <= n; i++ {
		s += strconv.Itoa(i)
	}
	for i := 0; i < len(s); i++ {
		curBit := getBit(i)
		if sumBit+curBit > n {
			for k := 1; k <= curBit; k++ {
				sumBit++
				if sumBit-n == 1 {
					return getR(i, k)
				}

			}
		}
		sumBit += curBit
	}
	return 0
}

func getR(nums int, a int) int {
	s := strconv.Itoa(nums)
	sl := strings.Split(s, "")
	d, _ := strconv.Atoi(sl[a-1])
	return d
}

func getBit(num int) int {
	if num == 0 {
		return 1
	}
	bit := 0
	for num != 0 {
		bit++
		num /= 10
	}
	return bit
}
